class Field(object):

    def __init__(self, name, column_type):
        self.name = name
        self.column_type = column_type

    def __str__(self):
        return '<%s:%s>' % (self.__class__, self.name)


class StringField(Field):

    def __init__(self, name):
        # super(type, obj) -> bound super object;
        # requires isinstance(obj, type)
        super(StringField, self).__init__(name, 'varchar(100)')

name = StringField('username')
print(name.column_type)
print(name.name)
print(type(name))
print(issubclass(type(name), Field))